package com.github.HarryHook.coding2017.jvm.constant;

public class FieldRefInfo extends ConstantInfo {
    private int type = ConstantInfo.FIELD_INFO;
    private int classInfoIndex;
    private int nameAndTypeIndex;

    public FieldRefInfo(ConstantPool pool) {
	super(pool);
    }

    public int getType() {
	return type;
    }

    public int getClassInfoIndex() {
	return classInfoIndex;
    }

    public void setClassInfoIndex(int classInfoIndex) {
	this.classInfoIndex = classInfoIndex;
    }

    public int getNameAndTypeIndex() {
	return nameAndTypeIndex;
    }

    public void setNameAndTypeIndex(int nameAndTypeIndex) {
	this.nameAndTypeIndex = nameAndTypeIndex;
    }

    public String toString() {

	NameAndTypeInfo typeInfo = (NameAndTypeInfo) this.getConstantInfo(this.getNameAndTypeIndex());

	return getClassName() + " : " + typeInfo.getName() + ":" + typeInfo.getTypeInfo() + "]";
    }

    public String getClassName() {

	ClassInfo classInfo = (ClassInfo) this.getConstantInfo(this.getClassInfoIndex());

	UTF8Info utf8Info = (UTF8Info) this.getConstantInfo(classInfo.getUtf8Index());

	return utf8Info.getValue();

    }

    public String getFieldName() {
	NameAndTypeInfo typeInfo = (NameAndTypeInfo) this.getConstantInfo(this.getNameAndTypeIndex());
	return typeInfo.getName();
    }

    public String getFieldType() {
	NameAndTypeInfo typeInfo = (NameAndTypeInfo) this.getConstantInfo(this.getNameAndTypeIndex());
	return typeInfo.getTypeInfo();
    }

    @Override
    public void accept(Visitor visitor) {
	visitor.visitFieldRef(this);
    }
}